// utils/request.js
// 默认API地址 - 请根据实际情况修改
// 开发环境：如果使用 natapp 等内网穿透工具，请设置为对应的公网地址
// 例如：'https://your-domain.com' 或 'http://your-natapp-url.natapp1.cc'
const DEFAULT_API_BASE_URL = 'http://192.168.43.231:5000';

const getBaseUrl = () => {
  // 优先使用存储的配置
  const storedUrl = wx.getStorageSync('API_BASE_URL');
  if (storedUrl) return storedUrl;

  // 开发环境提示
  if (DEFAULT_API_BASE_URL.includes('localhost')) {
    console.warn('⚠️ 当前使用 localhost，小程序无法直接访问。请配置实际的服务器地址：');
    console.warn('   方法1: 使用 wx.setStorageSync("API_BASE_URL", "你的服务器地址")');
    console.warn('   方法2: 修改 utils/request.js 中的 DEFAULT_API_BASE_URL');
  }

  return DEFAULT_API_BASE_URL;
};

const buildUrl = (url = '') => {
  if (!url) return getBaseUrl();
  if (/^https?:\/\//i.test(url)) return url;
  return `${getBaseUrl()}${url}`;
};

const request = (options = {}) => {
  return new Promise((resolve, reject) => {
    const fullUrl = buildUrl(options.url || '');

    // 获取 token（如果存在）
    const token = wx.getStorageSync('token');

    // 构建请求头
    const headers = {
      'content-type': 'application/json',
      ...options.header
    };

    // 如果有 token，添加到请求头
    if (token) {
      headers['Authorization'] = `Bearer ${token}`;
    }

    wx.request({
      url: fullUrl,
      method: options.method || 'GET',
      data: options.data || {},
      header: headers,
      success: (res) => {
        console.log('📡 请求成功:', fullUrl, res.data);
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          const errorMsg = res.data?.message || `请求失败: ${res.statusCode}`;
          console.error('❌ 请求返回错误:', errorMsg);
          reject(new Error(errorMsg));
        }
      },
      fail: (err) => {
        console.error('❌ 请求失败:', fullUrl, err);

        // 提供更友好的错误提示
        let errorMessage = '网络请求失败';
        if (err.errMsg) {
          if (err.errMsg.includes('timeout')) {
            errorMessage = '请求超时，请检查网络连接';
          } else if (err.errMsg.includes('fail') && fullUrl.includes('localhost')) {
            errorMessage = '无法连接到服务器，请检查服务器地址配置';
          } else {
            errorMessage = err.errMsg;
          }
        }

        // 如果是 localhost 连接失败，给出提示
        if (fullUrl.includes('localhost')) {
          console.warn('⚠️ 提示：小程序无法直接访问 localhost');
          console.warn('   请使用以下方法之一配置服务器地址：');
          console.warn('   1. 在代码中调用: wx.setStorageSync("API_BASE_URL", "你的服务器地址")');
          console.warn('   2. 修改 utils/request.js 中的 DEFAULT_API_BASE_URL');
        }

        reject(new Error(errorMessage));
      }
    });
  });
};

request.buildUrl = buildUrl;
request.getBaseUrl = getBaseUrl;
request.DEFAULT_API_BASE_URL = DEFAULT_API_BASE_URL;
request.setBaseUrl = (url) => {
  if (url) {
    wx.setStorageSync('API_BASE_URL', url);
  } else {
    wx.removeStorageSync('API_BASE_URL');
  }
};

module.exports = request;